import time
from datetime import datetime
from time import sleep

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class CommonDriver:
    def get_driver(self):
        """
        获取WebDriver实例并进行初始化。

        :return: WebDriver实例
        """
        # 从配置中提取所需的信息
        desc = {
            'platformName': 'Android',  # 目标平台，Android系统
            'platformVersion': '7',  # Android版本，指定为7.x
            'appPackage': 'com.dangdang.buy2',  # 要启动的应用包名
            'appActivity': 'com.dangdang.buy2.StartupActivity',  # 应用的启动Activity
            'noReset': False,  # 设置为False以便在每次测试时重置应用的状态
            'unicodeKeyboard': True,  # 使用Unicode键盘输入，适用于输入中文等特殊字符
            'udid': '127.0.0.1:21513',  # 目标设备的唯一标识符（UDID），这里是连接的Android模拟器或设备
        }

        # 定义命令执行器的URL，指向运行中的Appium Server
        command_executor_url = 'http://127.0.0.1:4723/wd/hub'

        # 创建WebDriver实例，连接到Appium Server，并传入所需的能力配置
        driver = webdriver.Remote(command_executor=command_executor_url, desired_capabilities=desc)

        # 设置隐式等待时间为10秒，以便在查找元素时等待最大10秒
        driver.implicitly_wait(5)

        # 输出连接成功的信息
        print("连接成功")

        # 返回已初始化的WebDriver实例
        return driver

    # def get_driver(self, device):
    #     """
    #     获取WebDriver实例并进行初始化。
    #
    #     :return: WebDriver实例
    #     """
    #     # 从配置中提取所需的信息
    #     desc = {
    #         'platformName': 'Android',  # 目标平台，Android系统
    #         'platformVersion': '7',  # Android版本，指定为7.x
    #         'appPackage': 'com.dangdang.buy2',  # 要启动的应用包名
    #         'appActivity': 'com.dangdang.buy2.StartupActivity',  # 应用的启动Activity
    #         'noReset': False,  # 设置为False以便在每次测试时重置应用的状态
    #         'unicodeKeyboard': True,  # 使用Unicode键盘输入，适用于输入中文等特殊字符
    #         'udid': '127.0.0.1:21503',  # 目标设备的唯一标识符（UDID），这里是连接的Android模拟器或设备
    #     }
    #
    #     # 定义命令执行器的URL，指向运行中的Appium Server
    #     command_executor_url = 'http://127.0.0.1:4723/wd/hub'
    #
    #     # 创建WebDriver实例，连接到Appium Server，并传入所需的能力配置
    #     driver = webdriver.Remote(command_executor=command_executor_url, desired_capabilities=desc)
    #
    #     # 设置隐式等待时间为10秒，以便在查找元素时等待最大10秒
    #     driver.implicitly_wait(5)
    #
    #     # 输出连接成功的信息
    #     print("连接成功")
    #
    #     # 返回已初始化的WebDriver实例
    #     return driver


if __name__ == '__main__':
    # 当脚本直接运行时，创建CommonDriver实例并调用get_driver方法以获取WebDriver
    driver = CommonDriver().get_driver()

    # 找到并点击文本为“同意”的TextView元素
    driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@text="同意"]').click()

    # 获取当前的日期和时间
    current_time = datetime.now()
    print("当前日期和时间:", current_time)

    try:
        # 使用显式等待，最多等待10秒，直到指定元素可见
        element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located(
                (AppiumBy.XPATH, '//android.widget.TextView[@resource-id="com.dangdang.buy2:id/tv_sur"]')
            )
        )
        # 找到可见的元素并点击它
        element.click()
    except BaseException as e:
        # 捕获并打印异常信息
        print(e)
    finally:
        # 在finally块中获取当前的日期和时间，确保在程序结束时打印
        current_time = datetime.now()
        print("当前日期和时间:", current_time)
